/**
 * SpringContextUtil.java        2009-9-25 上午09:12:48
 * caie
 * 版权所有 (c) 2007-2008 江苏鸿信系统集成有限公司
 */


package com.jsict.base.util;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/** 
 * <p>Description: [描述该类概要功能介绍]</p>
 * @author  <a href="mailto: caie@jsict.com">蔡锷</a>
 * @version 1.0 
 */
public class SpringContextUtil implements ApplicationContextAware {
	private static ApplicationContext applicationContext;     //Spring应用上下文环境

	public void setApplicationContext(ApplicationContext applicationContext)
			throws BeansException 
			{
				SpringContextUtil.applicationContext = applicationContext;
			}
	  public static ApplicationContext getApplicationContext() {
		    return applicationContext;
		  }
	  
	  /**
	   * 获取对象   
	   * @param name
	   * @return Object 一个以所给名字注册的bean的实例
	   * @throws BeansException
	   */
	   public static Object getBean(String name) throws BeansException {
	     return applicationContext.getBean(name);
	   }
	   /**
	    * 获取类型为requiredType的对象
	    * 如果bean不能被类型转换，相应的异常将会被抛出（BeanNotOfRequiredTypeException）
	    * @param name       bean注册名
	    * @param requiredType 返回对象类型
	    * @return Object 返回requiredType类型对象
	    * @throws BeansException
	    */
	    public static Object getBean(String name, Class requiredType) throws BeansException {
	      return applicationContext.getBean(name, requiredType);
	    }
	   
	    /**
	    * 如果BeanFactory包含一个与所给名称匹配的bean定义，则返回true 
	    * @param name
	    * @return boolean
	    */
	    public static boolean containsBean(String name) {
	      return applicationContext.containsBean(name);
	    }
	   
	    /**
	    * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。
	    * 如果与给定名字相应的bean定义没有被找到，将会抛出一个异常（NoSuchBeanDefinitionException）   
	    * @param name
	    * @return boolean
	    * @throws NoSuchBeanDefinitionException
	    */
	    public static boolean isSingleton(String name)  {
	      return applicationContext.isSingleton(name);
	    }
	   
	    /**
	    * @param name
	    * @return Class 注册对象的类型
	    * @throws NoSuchBeanDefinitionException
	    */
	    public static Class getType(String name) {
	      return applicationContext.getType(name);
	    }
	   
	    /**
	    * 如果给定的bean名字在bean定义中有别名，则返回这些别名   
	    * @param name
	    * @return
	    * @throws NoSuchBeanDefinitionException
	    */
	    public static String[] getAliases(String name) {
	      return applicationContext.getAliases(name);
	    }
}
